/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import views.ContentPanelView;
import xmlaufgabe7.UebungData;
import model.DownloadModel;
import views.DownloadView;

/**
 * Controller nach MVC. Uebernimmt Usereingaben zum Herunterladen der markierten
 * Dateien und zur Speicherung dieser auf der Festplatte. Uebergibt die Informationen
 * der Usereingaben weiter an das Model zur Verarbeitung.
 * 
 * 
 * @author s0527676
 */
public class DownloadListener implements ActionListener {

    /**
     * Liste aller Uebungsdatenobjekte
     */
    private ArrayList<UebungData> dataModelList;
    
    /**
     * Speichert View
     */
    private ContentPanelView content;
    
    /**
     * Speichert FileChooser
     */
    private JFileChooser fileChooser;
    
    /**
     * Initialisiert FileChooser und Liste der Uebungsdatenobjekte.
     * @param dataModelList 
     */
    public DownloadListener(ArrayList<UebungData> dataModelList) {
        fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        this.dataModelList = dataModelList;
    }
    
    /**
     * Intialisiert das Viewobjekt.
     * 
     * @param content Uebergebenes Viewobjekt
     */
    public void connectContentPanelView(ContentPanelView content) {
        this.content = content;
    }
    
    /**
     * Bietet dem Benutzer die Wahl eines Speicherortes und bei Erfolg werden View-
     * und Model zum Herunterladen und Speichern der ausgewaehlten Dateien erstellt.
     * 
     * @param e 
     */
    public void actionPerformed(ActionEvent e) {
        int returnVal = fileChooser.showSaveDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File saveDir = fileChooser.getSelectedFile();
            ArrayList<String> urls = new ArrayList<String>();

            for(int i = 0; i < content.getSelectionViewCount(); i++) {
                if(!content.getSelectionViewsByIndex(i).getDocumentBoxChecked().equals(""))
                    urls.add(content.getSelectionViewsByIndex(i).getDocumentBoxChecked());
                
                for(int j = 0; j < content.getSelectionViewsByIndex(i).getRessourceBoxListSize(); j++) {
                    if(!content.getSelectionViewsByIndex(i).getRessourceBoxCheckedByIndex(j).equals(""))
                        urls.add(content.getSelectionViewsByIndex(i).getRessourceBoxCheckedByIndex(j));
                }
            }
            
            DownloadModel dlModel = new DownloadModel(urls, saveDir.getPath());
            DownloadView dlView = new DownloadView(dlModel);
            dlModel.addObserver(dlView);
        }
    }
}
